/**
 * 
 */
package objserver.serverlistener;

import java.util.EventObject;

import android.remotematrixclient.objclient.CommandWrap;



/**
 * La clase <code>ObjEvent</code> genera objetos de tipo 
 * <code>EventObject</code> los cuales se utilizan para avisar a las subclases 
 * de <code>ObjEventListener</code> de los eventos definidos en la clase 
 * <code>Receiver</code>.
 * 
 * @author Rafael Asprilla
 *
 */
public class ObjEvent extends EventObject {

	/**
	 * 
	 */
	private static final long serialVersionUID = 8325840616447476779L;
	
	/**
	 * El comando que define la acción del evento.
	 */
	private CommandWrap cw;

	/**
	 * Constructor de la clase <code>ObjEvent</code>.
	 * 
	 * @param source
	 * Es el objeto que genera el evento.
	 */
	public ObjEvent(Object source) {
		super(source);
		this.cw = null;
	}
	
	/**
	 * Constructor de la clase <code>ObjEvent</code>.
	 * 
	 * @param source
	 * Es el objeto que genera el evento.
	 * @param cmdwrap
	 * Es el commando que genera el objeto <code>source</code>.
	 */
	public ObjEvent(Object source, CommandWrap cmdwrap) {
		super(source);
		this.cw = cmdwrap;
	}
	
	/**
	 * Retorna los datos del comando.
	 * 
	 * @return
	 * Retorna un objeto que contiene los datos.
	 */
	public Object getData(){
		return cw.data;
	}
	
	/**
	 * Define si la acción que originó el evento fue exitosa. Esto sólo 
	 * funciona si el comando recibido es de tipo "ACK".
	 * 
	 * @return
	 * Cierto si la operación fue un éxito. De lo contrario retorna Falso.
	 */
	public boolean isSuccess(){
		return cw.success;
	}
	
	/**
	 * Define si la acción que originó el evento es de tipo "ACK".
	 * @return
	 * Cierto si el comando es un ACK. De lo contrario retorna Falso.
	 */
	public boolean isACK(){
		return cw.ack;
	}
	
	/**
	 * Retorna el <code>id</code> del comando que originó el evento.
	 * @return
	 * Entero con el id del comando.
	 */
	public int getID(){
		return cw.id;
	}

}
